package com.brave.base;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * PackageName:com.brave.repository
 * CreateTime:2019/7/10 -16:25
 * Author:BraveKing
 * Params:
 **/
@NoRepositoryBean
public interface CommonRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>
{

    /**
     * 2019年7月11日 08点50分
     * 动态SQL查询-带分页
     * @param sql 拼装完成可以执行的SQL
     * @param pageSize 查询每页数量
     * @param pageNumber 当前页码
     * @return
     */
    Map<String, Object> findPageList(String sql, int pageSize, int pageNumber);


    /**
     * 2019年7月11日 08点51分
     * 动态SQL查询-不带分页
     * @param sql 拼装完成可以执行的SQL
     * @return
     */
    <OT> List<OT> findList(String sql);


    /**
     * 2019年7月17日 16点53分 
     * 查询数组形式数据
     * @param sql
     * @return
     */
    List<Object> findArrays(String sql);
    

    /**
     * 2019年7月11日 08点52分
     * 动态SQL查询-带分页-带缓存
     * @param sql 拼装完成可以执行的SQL
     * @param pageSize 查询每页数量
     * @param pageNumber 当前页码
     * @return
     */
    @Cacheable(cacheNames = "findCachePageList")
    Map<String, Object> findCachePageList(String sql, int pageSize, int pageNumber);


    /**
     * 2019年7月11日 08点53分
     * 动态SQL查询-不带分页-带缓存
     * @param sql 拼装完成可以执行的SQL
     * @return
     */
    @Cacheable(cacheNames = "findCacheList")
    <OT> List<OT> findCacheList(String sql);
    
    
    
    <BID, OT> int deleteEntityById(BID id, Class<OT> t);
    
    
    
    <OT> List<OT> findEntityList(String sql, Class<OT> entityClass);
}
